Media content consumption continues shifting from traditional broadcasting to online or Internet based consumption. As a result, online media content providers are continually expanding and optimizing their resources and bandwidth in order to meet the increasing demand and increased expectations for quality and user experience.
Online media content is typically encoded in a source or master file. A transmuxer breaks the source or master file into several segments. Each segment encodes a different chunk or temporal duration of the media content. The segments can be requested independent of one another. Accordingly, servers retrieve and send the segments that are requested by a user rather than the entire media content file. The media content segmenting reduces server load, the cache footprint consumed by the media content, and wasted resources and bandwidth in unnecessarily retrieving parts of the media content that are not requested by users. The media content segmenting further simplifies starting or resuming playback at different points in the media content stream as users can request segments at specific temporal durations.
Prior art transmuxers create segments that are of equal length. This regimented creation of segments results in segments with start times that do not necessarily align with key frames or I-frames from the source or master file providing the original and complete encoding for the media content. Nevertheless, each segment must start with a key frame. Accordingly, the transmuxers encode each segment independent of the original media content encoding. Segment encoding results in quality loss as each encoding iteration is a lossy process. Segment encoding also introduces delays in readying the segments for delivery because of the involved processing overhead. These delays can degrade media content delivery performance and the user experience, especially when the segment creation is performed directly in response to received user requests.
Some transmuxers have identified these inefficiencies and have optimized the segment creation to avoid the segment encoding steps. To do so, the transmuxers commence the segments at existing key frame locations in the source or master file providing the original encoding for the media content. Each segment can then be formed from the existing encoded binary data of an existing key frame and a subsequent set of frames that follows the key frame commencing the segment.
A byproduct of creating segments that commence at existing key frame locations is that the segments will no longer be of equal length because of their dependence on key frame encoding within the master or source file. This affects the naming convention used for requesting the segments. Segments of equal length could be identified by a simple numerical sequence. In other words, each segment name is appended with a different sequence number that maps to the segment start offset or time (e.g., sequence number 0 corresponds to first segment, sequence number 1 corresponds to segment starting at the five second offset, sequence number 2 corresponds to the segment starting at the ten second offset, etc.). However, segments of unequal or differing length cannot be identified with such a sequential naming convention as the sequence number does not consistently map to the key frame locations at which the segments commence.
A new naming convention is therefore used to identify and request segments commencing at existing key frames within an original and complete encoding of media content. The new naming convention involves providing a non-sequential identifier representing the time or frame offset for the key frame at which the segment commences.
A segment naming convention that does not involve the sequential numbering of segments is however incompatible with existing server prefetching mechanisms. Without a sequential naming convention, the server is unable to generate a prefetch request for requesting a next segment following a current segment requested in a user issued request. More specifically, the server cannot produce the name or request for the next segment using only the name or request for the current segment. Thus, optimizing segment creation to avoid segment encoding breaks prefetching that is reliant on a sequential naming convention.
There is therefore a need to provide prefetching for segments that do not follow a sequential naming convention. More specifically, there is a need to provide prefetching for segments generated from irregular key frame placement within an original and complete encoding of media content.